package com.xrh.core.generater.mybatisplus.generater;

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import com.xrh.core.generater.bean.TableInfo;
import com.xrh.core.generater.bean.UserInput;
import com.xrh.core.generater.interfaces.TemplateRootPath;
import com.xrh.core.generater.mybatisplus.AddRequestGenerater;
import com.xrh.core.generater.mybatisplus.ControllerGenerater;
import com.xrh.core.generater.mybatisplus.DTOGenerater;
import com.xrh.core.generater.mybatisplus.EntityGenerater;
import com.xrh.core.generater.mybatisplus.MapperGenerater;
import com.xrh.core.generater.mybatisplus.QueryRequestGenerater;
import com.xrh.core.generater.mybatisplus.ServiceGenerater;
import com.xrh.core.generater.mybatisplus.UpdateRequestGenerater;
import com.xrh.core.generater.utils.DataBaseUtils;
import com.xrh.core.generater.utils.FileUtils;

/**
* @function mybatis生成器
* @author 肖荣辉
* @date 2018年10月23日
*/
public class MybatisPlusGenerater implements TemplateRootPath {
	
	//当没有界面的时候 , 按照下面的写法来搞新的生成器
//	public static void main(String[] args) {
//		
//		UserInput userInput = new UserInput();
//		
//		/*数据库配置*/
//		DataBaseConfig config = new DataBaseConfig("127.0.0.1", "3306", "km", "root", "root");
//		userInput.setConfig(config);
//		
//		//输出目录
//		userInput.setOutputDirPath(PathUtils.getDesktopPath() + "/代码生成器");
//		
//		/*文件包路径*/
//		userInput.setAddRequestPackagePath("com.ewell.km.api.request.addRequest");
//		userInput.setUpdateRequestPackagePath("com.ewell.km.api.request.updateRequest");
//		userInput.setQueryRequestPackagePath("com.ewell.km.api.request.queryRequest");
//		userInput.setControllerPackagePath("com.ewell.km.service.controllers");
//		userInput.setDtoPackagePath("com.ewell.km.api.dto");
//		userInput.setDomainPackagePath("com.ewell.km.api.entity");
//		userInput.setDaoPackagePath("com.ewell.km.service.mapper");
//		userInput.setRemoteServiceImplPackagePath("com.ewell.km.service.service");
//		userInput.setUserName("肖荣辉");
//		
//		//生成文件
//		MybatisPlusGenerater generater = new MybatisPlusGenerater();
//		
//		generater.generateFiles(userInput);
//		
//	}
	
	/**
	 * @function 生成文件
	 * @author 肖荣辉
	 * @date 2021年6月29日
	*/
	public void generateFiles(MybatisPlusGeneraterUI ui ,  UserInput userInput) {
		
		ui.console("-------正在生成-------");
		
		try {
			
			Map<String , TableInfo> tableInfoMap = DataBaseUtils.getTableInfoMap(ui , userInput.getConfig());
			
			/*先清空了*/
			FileUtils.delFolder(userInput.getOutputDirPath());
			
			File rootFile = new File(userInput.getOutputDirPath());
			rootFile.mkdirs();
			
			//类名和注释对照map
			Map<String, String> classNameCommentMap = new HashMap<>();
			
			Collection<TableInfo> tableInfos =  tableInfoMap.values();
			
			for(TableInfo item : tableInfos){
				classNameCommentMap.put(item.getClassName() , item.getComment());
			}
			
			//进度+1
			for(TableInfo tableInfo : tableInfos){
				
				ui.console("正在生成 : " +  tableInfo.getTableName() + "相关文件..");
				
				EntityGenerater.generateFile(userInput , tableInfo , this);
				AddRequestGenerater.generateFile(userInput , tableInfo , this);
				ControllerGenerater.generateFile(userInput, tableInfo , this);
				DTOGenerater.generateFile(userInput , tableInfo , this);
				MapperGenerater.generateFile(userInput , tableInfo , this);
				QueryRequestGenerater.generateFile(userInput , tableInfo , this);
				ServiceGenerater.generateFile(userInput , tableInfo , this);
				UpdateRequestGenerater.generateFile(userInput , tableInfo , this);
			}
			
			ui.console("生成成功!");
			
		} catch (Exception e) {
			System.out.println("生成失败!");
			e.printStackTrace();
		}
		
		ui.console("缓存用户配置文件 : " + MybatisPlusGeneraterUI.CACHE_FILE_NAME);
		ui.cacheUserInput(userInput);
		
		
		ui.console("-------生成结束-------");
		
		//生成按钮启用
		ui.enableGeneraterBtn();
		
	}

	@Override
	public String getTemplateRootDirPath() {
		return "template/mybatis-plus";
	}
	
}
